package com.wy;

import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;

/**
 * 插件开发
 * 
 * <pre>
 * Extension:扩展,提供扩展点的服务
 * Extension Point:扩展点,提供服务.每一个希望被别的程序模块扩展的模块,都必须声明一系列的扩展点
 * Equniox:基于OSGi的运行时框架
 * 图形模块:基于SWT/JFace,JFace是基于SWT的一套图形工具包,它没有为SWT提供任何新的功能,只是简化SWT的操作
 * </pre>
 * 
 * Eclipse插件系统:
 * 
 * <pre>
 * 运行时:Runtime,运行时定义了插件的结构,负责在Eclipse运行时发现和管理插件
 * 工作空间:Workspace,定义了Eclipse的工作区,用来分配和跟踪资源
 * 标准窗口小部件工具箱:SWT,一个UI窗口小部件通用库,它能生成本地化风格的用户交互界面组件,但是拥有独立于操作系统的API
 * Face:建立在SWT之上,提供对常用UI任务的支持
 * 工作台:Workbench,定义了Eclipse的UI聚合体,提供包括编辑器,视图,透视图等界面组成部分
 * 小组:Team,该插件为Eclipse集成各种类型的源代码控制管理系统,如CVS,Git等,提供服务
 * 帮助:Help,为开发者编写帮助文档提供支持
 * JDT:Java开发工具,提供对Java程序的编辑,编译,调试,测试功能,实现功能完整的Java开发环境
 * PDE:插件开发环境,提供自动创建,处理,调试和部署插件的工具
 * </pre>
 * 
 * 常用扩展点:
 * 
 * <pre>
 * org.eclipse.ui.views:允许插件将视图添加到工作台中,插件必须在plugin.xml中注册,并配置相关信息
 * org.eclipse.ui.editors:插件使用该扩展点将编译器添加到工作台中,插件必须在plugin.xml中注册,并配置相关信息
 * org.eclipse.ui.popupMenus:允许插件添加到其他视图和编辑器的上下文菜单,可以利用操作的标识将操作添加到特定上下文菜单,
 * 		或者通过将操作与特定对象类型进行关联来添加操作
 * org.eclipse.ui.actionSets:向工作台菜单和工具栏添加菜单,菜单项和工具栏项.为了减少同时显示每个插件的菜单添加项而导致的混乱,
 * 		可将添加项分成多个操作集,通过用户首选项来使这些操作集可见
 * org.eclipse.ui.viewActions:该扩展点允许插件为已经存在的视图的本地下拉菜单和本地工具栏添加菜单项,子菜单和工具栏条目
 * org.eclipse.ui.editorActions:当编辑器活动时,该扩展点允许向工作台菜单和工具栏添加条目
 * </pre>
 * 
 * 激活器:
 * 
 * <pre>
 * Activator:控制插件生命周期,该激活器会根据是否选择此插件将对UI进行添加复选框而继承自不同的类
 * 如果选择该选框,则激活器类将扩展org.eclipse.ui.plugin.AbstractUIPlugin类来对插件项目的生命周期进行管理
 * 如果该插件不对UI进行添加,则激活器类扩展org.eclipse.core.runtime.Plugin类对该插件项目的生命周期进行管理
 * </pre>
 * 
 * 目录结构:
 * 
 * <pre>
 * Overview:概览,包括预览,依赖,测试,打包等信息,点击可直接跳到相应目录
 * Dependencies:依赖页面,主要是系统依赖
 * Runtime:运行时依赖
 * Extensions:扩展
 * Extension Points:扩展点
 * Build:打包信息
 * MANIFEST.MF:提供捆绑软件的信息,通过Dependencies添加的jar包都会被写入到该文件中
 * plugin.xml:扩展点配置信息
 * build.properties:Build构建的文件
 * </pre>
 * 
 * @auther 飞花梦影
 * @date 2021-07-17 14:49:38
 * @git {@link https://github.com/dreamFlyingFlower}
 */
public class Application {

	public static void notice() {
		// 每个捆绑软件有一个象征标识符(symbolic),这个标识符是插件的唯一标识
		// 获得捆绑软件对象
		Bundle bundle = Platform.getBundle("symbolic");
		// 获得插件安装目录的URL
		bundle.getEntry("/");
		// 获得插件提供者的名称
		bundle.getHeaders().get(Constants.BUNDLE_VENDOR);
		// 获得插件的可显示标签
		bundle.getHeaders().get(Constants.BUNDLE_NAME);
		// 获得插件的版本号
		bundle.getHeaders().get(Constants.BUNDLE_VERSION);
		// 验证插件是否被激活
		System.out.println(bundle.getState() == Bundle.ACTIVE);
		// 获得插件的唯一标识
		bundle.getSymbolicName();
		// 获得当前区域对应的插件资源包对象,这个对象包含的信息会在插件发布后作为插件安装目录中的plugin.properties进行存储
		Platform.getResourceBundle(bundle);
	}
}